<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>
//1. 统计下面字符串字符出现的频率
       /*  var str = 'aabbccdd';
        var res= [...str].reduce((a,b)=>(a[b]++||(a[b]=1),a),{}) */

        /* var res=str.split('').reduce((a,b)=>
            (a[b]++||(a[b]=1),a)
            // if(!a[b]++){
            //     a[b]=1
            // }
            // if(a[b]){
            //     a[b]++;
            // }else{
            //     a[b]=1;
             // return a;
        ,{}) */
        
        /*  var res={}
         for(var i=0;i<str.length;i++){
            if(res[str[i]]){
                res[str[i]]++;
            }else{
                res[str[i]]=1
            }
         }
         console.log(res); */


 //2.移除数组 arr 中的所有值与 item 相等的元素
       /* function removeItem(arr,item){
         let newArr=[];
         for(let i=0;i<arr.length;i++){
             if(arr[i]!=item){
                 newArr.push(arr[i])
             }
            
         }     
         return newArr      
         }
         let arr=[1,2,3,4,5,5,5,5,];
         let item=5;
         let str= removeItem(arr,item)
         console.log(str); */

//3.找出元素 item 在给定数组 arr 中的位置 , 如果数组中存在 item，则返回元素在数组中的位置，否则返回 -1
     /*   function indexOf(arr, item) {
            for (let i = 0; i < arr.length; i++) {
                if (arr[i] == item) {
                    return i
                }
                return -1
            }
        }
        let arr = [1, 2, 3, 4, 5, 6]
        let res = indexOf(arr, 3);
        console.log(res); */

//4.去除数组中所有重复元素
        /*  function removeItem(arr, item) {
             let newArr = {};
             for (let item of arr) {
                 if (newArr[item]) {
                     newArr[item] = newArr[item]
                 } else {
                     newArr[item] = item
                 }
             }
             return Object.values(newArr)
         }
         let arr = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5];
         console.log(removeItem(arr)); */

// 5.有一个从小到大排好序的数组。现输入一个数，要求按原来的规律插入数组中
         /* function input(arr,n){
            for(var i=0;i<arr.length;i++){
                if(arr[i]>=n){
                    arr.splice(i,0,n)
                    break
                    }
            }
            if(n>arr[arr.length-1]){
                arr.push(n)
            }
            return arr
         }
         let arr=[1,2,2,3,6,5,59]
         console.log(input(arr,50)); */

 // 6.自己实现数组官方函数reverse 的功能，改变原数组
        /* function reverse(arr){
            let res=[]
            for(let i=0;i<arr.length;i++){
                res.unshift(arr[i]);
            }
            return res
        }
        let arr=[1,2,3,4,5,6,9,87,8]
        console.log(reverse(arr)); */

// 7.计算数组 arr中所有元素的总和（数组中的元素均为 Number类型)

        /* function Number(arr){
            let sum=0;
            for(let i=0;i<arr.length;i++){
                sum +=arr[i]
            }
            return sum
        }
        let arr=[1,2,3,4,5,6]
        console.log(Number(arr)); */

 // 8.将数组中每个元素的值都加'10'
       /*  let arr=[1,2,3,4,5,6]
        function add(x,index,arr){
            arr[index] +=10;
        }
        arr.forEach(add)
        console.log(arr); */

// 9.快速排序
/* function quickSort(arr) {
  if(arr.length <= 1) return arr;
  const middleIndex = Math.floor(arr.length / 2);
  const middle = arr.splice(middleIndex,1)[0];
  const left = [], right = [];
  arr.foreach(item => {
    if(item < middle) {
      left.push(item);
    }else {
      right.push(item);
    }
  });
  return quickSort(left).concat(middle,quickSort(right));
} */

//10.判断一组数字是否连续
/* function contiArr(arr) {
  var result = [],temp = [];
  arr.sort(function(a, b) {
    return a - b;
  }).concat(Infinity).reduce(function(a, b) {
    temp.push(a);
    if(b - a > 1) {
      result.push(temp);
      temp = [];
    }
    return b;
  });
  return result;
} */

//11. 实现随机选取10–100之间的10个数字，存入一个数组，并排序
/* var array = [];
function getRandom(start,end){
  var transition = end - start + 1;	//加1是为了能取到100
  var result = Math.floor(Math.random() * transition + start); //[0,90]+10
  return result;
}
for(var i = 0; i < 10; i++){
  array.push(getRandom(10,100));
}
array.sort(function(a,b){
  return a > b;
})
console.log(array); */


//12. 将字符串转换为驼峰格式
/* function cssStyle2DomStyle(sName) {
  let arr = sName.split('-');
  arr[0] != "" || arr.splice(0,1);
  for(let i = 1;i < arr.length;i++){
    arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].slice(1);
  }
  return arr.join("");
} */

//13. 纯数字字符串添加千分符
/* function toThousands(str){
  var result;
  var arr = [],newArr = [];
  var counter = 0;
  arr = str.split('');
  for(var i = arr.length - 1;i >= 0; i--){
    counter++;
	newArr.unshift(arr[i]);
	if(!(counter % 3) && i != 0){
	  newArr.unshift(',');
	}
  }
  result = newArr.join('').toString();
  return result;
} */

//14.使用js，返回1到999所有自然数中一共出现过多少次“1”，如1到21一共出现过13次“1”
/* function numStrProcess(num,length) {
  var numStr = num.toString();
  if(numStr.length >= length) {
    return numStr;
  }
  for(var i = 0; i < length - numStr.length; i++) {
    numStr = "0" + numStr;
  } 
  return numStr;
}
var result = 0;
for(var j = 1; j <= 999; j++) {
  var numStr = numStrProcess(j, 3);
  for(var k = 0; k < numStr.length; k++) {
    if(numStr[k] == 1) {
      result += 1;
    }
  }
}
console.log(result); */

// 15.不借助临时变量，进行两个整数的交换
//方法一：使用加减法
/* var a = 6;
var b = 2;
b = a - b;	//b = 4
a = a - b;	//a = 2
b = a + b;	//b = 6
console.log(a,b); */

//方法二：
/* let a = 6, b = 2;
a = a ^ b = 0110 ^ 0010 = 0100; // a = 4
b = a ^ b = 0100 ^ 0010 = 0110; // b = 6
a = a ^ b = 0100 ^ 0110 = 0010; // a = 2 */

//方法三：ES6解构赋值
/* let a = 6, b = 2;
[a,b] = [b,a];
console.log(a,b); // 2 6 */

</script>
</body>

</html>